/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.awt.HeadlessException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import models.Projeto;
import utils.conexao.DataBase;
import utils.conexao.DataBaseFactory;
import utils.observer.entity.EntitySubject;

/**
 *
 * @author Oliver Kraemer
 */
public class ProjetoDAO {

    private static ProjetoDAO instance;
    private EntitySubject subject;
    
    private ProjetoDAO() {
        this.subject = new EntitySubject();
    }
    
    public static ProjetoDAO getInstance() {
        if ( instance == null ) {
            instance = new ProjetoDAO();
        }
        
        return instance;
    }
    
    public EntitySubject getSubject() {
        return this.subject;
    }
    
    public static void inserir(Projeto p) {
        try {
            if (!DataBaseFactory.getConexao().persistir(p)) {
                JOptionPane.showMessageDialog(null, "Não foi possível inserir o Projeto.");
            }
            
            getInstance().subject.notifyObservers();
        } catch (IllegalArgumentException | IllegalAccessException | DataBase.DataBaseIDException | DataBase.DataBaseDuplicateIDDeclarationException | HeadlessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    public static void alterar(Projeto p) {
        try {
            if (!DataBaseFactory.getConexao().persistir(p)) {
                JOptionPane.showMessageDialog(null, "Não foi possível alterar o Projeto.");
            }
            
            getInstance().subject.notifyObservers();
        } catch (IllegalArgumentException | IllegalAccessException | DataBase.DataBaseIDException | DataBase.DataBaseDuplicateIDDeclarationException | HeadlessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    public static void excluir(Projeto p) {
        try {
            DataBaseFactory.getConexao().excluir(p);
            
            getInstance().subject.notifyObservers();
        } catch (DataBase.DataBaseDuplicateIDDeclarationException | DataBase.DataBaseIDException | IllegalArgumentException | IllegalAccessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
    
    public static ArrayList<Projeto> getProjetos() {
        return DataBaseFactory.getConexao().getAll(Projeto.class);
    }
}
